
#ifndef GRAPHFACTORY_HPP_
#define GRAPHFACTORY_HPP_

#include <string>
#include "../logger/logger.hpp"
#include "../validacion/nodeValidator.hpp"
#include "../validacion/edgeValidator.hpp"
#include "graph.hpp"

/**
 * Class GraphFactory: encargada de la generacion
 * del grafo validando cada elemento ingresante.
 */
class GraphFactory {
private:
	NodeValidator nodeValidator;
	EdgeValidator edgeValidator;
	Graph*		  graph;
    int           xMax;
    int           xMin;
    int           yMax;
    int           yMin;

    void validateSizeGraph(Logger *logger);
public:

	/**
	 * Constructor parametrizado de la clase GraphFactory.
	 */
	GraphFactory(std::string &fileToParseN, std::string &fileToParseE,
			   Logger *logger, Graph* graph);

	/**
	 * Destructor de la clase GraphFactory.
	 */
	virtual ~GraphFactory();

	/**
	 * Destructor de la clase GraphFactory.
	 */
	void generateGraph();

     /**
	 * Metodo getter de la posicion X maxima del grafo.
	 * @return Retorna la posicion X maxima.
	 */
    int getXMax();

     /**
	 * Metodo getter de la posicion Y maxima del grafo.
	 * @return Retorna la posicion Y maxima.
	 */
    int getYMax();

     /**
	 * Metodo getter de la posicion X minima del grafo.
	 * @return Retorna la posicion X minima.
	 */
    int getXMin();

    /**
	 * Metodo getter de la posicion Y minima del grafo.
	 * @return Retorna la posicion Y minima.
	 */
    int getYMin();

};

#endif /* GRAPHFACTORY_HPP_ */
